package com.bdsoft.actions.OperationLogManage.Service.impl;

import com.bdsoft.actions.OperationLogManage.DAO.OperationLogMapper;
import com.bdsoft.actions.OperationLogManage.Service.OperationLogService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


import java.util.Date;
import java.util.List;
import java.util.Map;

@Service
public class OperationLogServiceImpl implements OperationLogService {

    @Autowired
    private OperationLogMapper operationLogMapper;

    /**
     * 获取操作日志列表
     *
     * @param pageNum     当前页码
     * @param pageSize    每页显示条数
     * @param operation   操作类型
     * @param userId      用户ID
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @return PageInfo<Map<String, Object>> 操作日志分页信息
     */
    @Override
    public PageInfo<Map<String, Object>> getOperationLogList(int pageNum, int pageSize, String operation, String userId, Date startTime, Date endTime) {
        // 使用PageHelper插件进行分页
        PageHelper.startPage(pageNum, pageSize);

        // 调用操作日志Mapper，查询操作日志列表
        List<Map<String, Object>> logs = operationLogMapper.selectOperationLogList(
                operation, userId, startTime, endTime);

        // 将查询结果封装为PageInfo对象并返回
        return new PageInfo<>(logs);
    }


    /**
     * 删除操作日志
     *
     * @param logId 操作日志的ID
     * @return 返回操作的结果，包含状态码、消息和已删除日志的ID（如果删除成功）
     */
    @Override
    public Map<String, Object> deleteOperationLog(String logId) {
        // 通过操作日志ID查询操作日志
        Map<String, Object> log = operationLogMapper.selectOperationLogById(logId);
        // 如果查询结果为空，说明操作日志不存在
        if (log == null) {
            // 返回404状态码和相应消息
            return Map.of("code", 404, "message", "操作日志不存在");
        }

        // 删除操作日志
        int result = operationLogMapper.deleteOperationLog(logId);
        // 如果删除成功（结果大于0）
        if (result > 0) {
            // 返回200状态码、成功消息和已删除日志的ID
            return Map.of("code", 200, "message", "操作日志删除成功", "deletedId", logId);
        }
        // 如果删除失败（结果不大于0）
        return Map.of("code", 500, "message", "操作日志删除失败");
    }


    /**
     * 批量删除操作日志
     *
     * @param logIds 日志ID列表
     * @return 包含操作结果的Map对象，包括状态码、消息和删除的数量
     */
    @Override
    @Transactional
    public Map<String, Object> batchDeleteOperationLog(List<String> logIds) {
        // 判断日志ID列表是否为空
        if (logIds == null || logIds.isEmpty()) {
            // 返回错误信息和状态码
            return Map.of("code", 400, "message", "日志ID列表不能为空");
        }

        // 执行批量删除操作
        int result = operationLogMapper.batchDeleteOperationLog(logIds);
        // 判断删除结果
        if (result > 0) {
            // 返回成功信息和状态码，以及删除的数量
            return Map.of(
                    "code", 200,
                    "message", "批量删除成功",
                    "deletedCount", result
            );
        }
        // 返回失败信息和状态码
        return Map.of("code", 500, "message", "批量删除失败");
    }

}